﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.IO;

namespace Presentation.Pages
{
    public partial class NoticiasCadastroFotos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (!Util.usuarioEhAdmin(this.Context))
                    Response.Redirect("~/Pages/index.aspx");
                else
                    carregarNoticia();
            }
        }

        private void carregarNoticia()
        {
            int codigoNoticia;
            int.TryParse(Request.QueryString["codigo"], out codigoNoticia);

            if (codigoNoticia == 0)
                Util.showMessage(this, "Notícia inválida", "~/Pages/index.aspx");
            else
            {
                using (ministerioprosperid1Entities banco = new ministerioprosperid1Entities())
                {
                    DENoticia noticia = banco.DENoticias.Single(q => q.Codigo == codigoNoticia);
                    this.lblCodigo.Text = noticia.Codigo.ToString();
                    this.lblTitulo.Text = noticia.Titulo;
                }

                carregarFotos();
            }
        }

        private void carregarFotos()
        {
            try
            {
                int codigo = Convert.ToInt32(this.lblCodigo.Text);
                using (ministerioprosperid1Entities banco = new ministerioprosperid1Entities())
                {
                    List<DENoticiaFoto> noticiasFoto = banco.DENoticiaFotoes.Where(q => q.CodigoNoticia == codigo).ToList();

                    grvFotos.DataSource = noticiasFoto;
                    grvFotos.DataBind();
                }
            }
            catch (Exception)
            {
                Util.showMessage(this, "Erro ao carregar fotos");
            }
        }

        protected void btnExcluir_Click(object sender, EventArgs e)
        {
            try
            {
                if (!Util.usuarioEhAdmin(this.Context))
                    Response.Redirect("~/Pages/index.aspx");
                else
                {
                    Button btn = sender as Button;
                    Int32 id = Convert.ToInt32(btn.CommandArgument);

                    using (ministerioprosperid1Entities banco = new ministerioprosperid1Entities())
                    {
                        DENoticiaFoto foto = banco.DENoticiaFotoes.Single(q => q.Codigo.Equals(id));
                        banco.DENoticiaFotoes.DeleteObject(foto);

                        banco.SaveChanges();
                    }

                    carregarFotos();

                    Util.showMessage(this, "Foto excluída com sucesso");
                }
            }
            catch (Exception)
            {
                Util.showMessage(this, "Erro ao excluir foto");
            }
        }

        private string getPostedFileName()
        {
            try
            {
                string fn = this.lblCodigo.Text + "_";
                fn += System.IO.Path.GetFileName(fupFoto.PostedFile.FileName);

                string diretorio = Server.MapPath("~/fotos/Noticias");
                if (!Directory.Exists(diretorio))
                    Directory.CreateDirectory(diretorio);

                diretorio += "//" + DateTime.Today.Year;
                if (!Directory.Exists(diretorio))
                    Directory.CreateDirectory(diretorio);

                diretorio += "//" + DateTime.Today.Month.ToString().PadLeft(2,'0');
                if (!Directory.Exists(diretorio))
                    Directory.CreateDirectory(diretorio);

                return diretorio + "\\" + fn;
            }
            catch (Exception)
            {
                throw;
            }
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Util.usuarioEhAdmin(this.Context))
                {
                    if (this.fupFoto.HasFile)
                    {
                        string SaveLocation = getPostedFileName();
                        fupFoto.PostedFile.SaveAs(SaveLocation);

                        //Salvando apenas o nome do arquivo
                        StringBuilder file = new StringBuilder();
                        file.Append("..//fotos//Noticias//" + DateTime.Today.Year + "//" + DateTime.Today.Month.ToString().PadLeft(2,'0') + "//");
                        file.Append(this.lblCodigo.Text);
                        file.Append("_");
                        file.Append(System.IO.Path.GetFileName(fupFoto.PostedFile.FileName));

                        DENoticiaFoto foto = new DENoticiaFoto();
                        foto.CodigoNoticia = Convert.ToInt32(lblCodigo.Text);
                        foto.Caminho = file.ToString();
                        foto.Alt = this.txtAlt.Text;

                        using (ministerioprosperid1Entities banco = new ministerioprosperid1Entities())
                        {
                            banco.AddToDENoticiaFotoes(foto);
                            banco.SaveChanges();
                        }

                        carregarFotos();

                        this.txtAlt.Text = String.Empty;

                        Util.showMessage(this, "Foto cadastrada com sucesso");
                    }
                    else
                        Util.showMessage(this, "Favor selecionar uma foto");
                }
                else
                    Response.Redirect("~/Pages/index.aspx");
            }
            catch (Exception)
            {
                Util.showMessage(this, "Houve um erro ao cadastrar uma nova foto");
            }
        }
    }
}